/*
己知无向连通图G由顶点集V和边集E组成，|E|>0,
当G中度为奇数的顶点个数为不大于2的偶数时，G存在包含所有边且长度为|E|的路径 (称为EL路径）。
设图G采用邻接矩阵存储，设计算法判断图中是否存在EL路径，若存在返回1，否则返回0。
*/
#include <iostream>
#include "mgraph.h"
using namespace std;

// 判断是否存在EL路径
int IsExistEL(mgraph G)
{
  // count记录度为奇数的顶点个数
  int degree, i, j, count = 0;
  
  // 遍历结点
  for (i = 0; i < G.numver; ++i)
  {
    // 记录各个结点的度
    degree = 0;
    
    // 统计结点的度
    for (j = 0; j < G.numver; ++j)
      degree += G.Edge[i][j];
    
    // 判断该结点的度是否为奇数
    if (degree % 2 != 0)
      count++;
  }
  
  // 不大于2的偶数
  if (count == 0 || count == 2)
    return 1; // 存在EL路径
  else
    return 0; // 不存在EL路径
}

int main()
{
  // 创建图 -- 邻接矩阵表示
  mgraph M = create_mgraph();
  
  // 判断是否存在EL路径
  if (IsExistEL(M))
    cout << "存在!";
  else
    cout << "不存在!";
  return 0;
}